Distributed memory systems have been in existence for quite some time. Today's distributed memory systems serve to create a collection of address spaces from a plurality of network nodes which can be shared among the nodes. As a result they are commonly referred to as Distributed Shared Memory (DSM) systems. In a Distributed Shared Memory, multiple nodes share a memory that is physically distributed between many different nodes where one or more of the nodes may additionally have private memory. This allows networked nodes to have access to more memory than they would have access to individually.
One characteristic of today's DSMs is that any given address of the shared address space has a home node. That is, each shared address is fixed to a particular a home node. The home node is the only node that may edit the physical memory location associate with a shared address of a distributed shared address space. For another node to access the shared address, the node must obtain a copy of the area of physical memory associated with the shared address of the home node in order for the node to access the physical memory associated with the shared address.
Within the home node, the shared address may be a virtual address. Computer systems utilize a technology known as virtual memory to provide a processor addressable memory space larger than the available processor physical memory accessible to the microprocessor instruction set. Virtual memory that is active but not currently mapped to a processor physical memory location is stored in a swap space in persistent memory. The size of the swap space is limited, since most of persistent memory is reserved for use by the file system. Current processor virtual and physical address spaces are sequential in that they are flat, linear, mathematically based address spaces.
While a shared address may be virtual within a home node, it is not virtual with respect to other nodes with which the address is shared. Shared addresses in shared distributed memory systems include a portion, a node/host ID, of the address which identifies the shared address's home node which is a physical location identifier. The node/host ID refers to a specific network node to which the shared address space is fixed for association with a physical memory location of that particular network node. A node accessing a shared address associated with another node is referred to herein as a shared memory client and a node hosting the shared address is referred to as a shared memory server. These terms are relative in that most shared distributed memory systems are used by a set of peer nodes which act in the roles of both shared memory client and shared memory server. A shared memory server owns a shared address, which does not move from the shared memory server. In order to access the physical memory location associated with the shared address, the shared memory client typically caches the contents of the shared memory server's physical memory location associated with the shared address or creates a new copy which doesn't require the current contents in order to access it. When the shared memory client makes edits to the cached copy, those edits must be transferred back to the shared memory server for updating the physical memory location associated with the shared address.
Given that the home ID is not virtualized, distributed shared memory does not support a unified Distributable Virtual Address Space (DVAS). A DVAS includes a collection of virtual addresses that can be dynamically distributed among a plurality of network nodes. That is, the virtual addresses are movable among the nodes allowing a virtual address from the DVAS to be associated with a physical memory location of any node. The nodes can thus transfer the virtual addresses within the DVAS among themselves as required for access improving efficiency and performance.
Accordingly, in light of these difficulties associated with distributed shared memory systems, there exists a need for improved methods, systems, and computer program products for using a distributable virtual address space.